package com.jvyou.app.common.utils.pinYin;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtils {

    /**
     * 获取输入值的拼音简码（支持多音字）
     *
     * @param input 输入值（支持汉字、字母、数字等）
     * @return 拼音简码（大写字母）
     */
    public static String getPinyinCode(String input) {
        if (input == null || input.isEmpty()) {
            return "";
        }

        StringBuilder pinyinCode = new StringBuilder();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 拼音大写
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带音调

        for (char c : input.toCharArray()) {
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]")) { // 判断是否为汉字
                try {
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null && pinyinArray.length > 0) {
                        // 取第一个拼音的首字母（可根据上下文选择正确的拼音）
                        pinyinCode.append(pinyinArray[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else if (Character.isLetter(c)) { // 如果是字母，直接取首字母
                pinyinCode.append(Character.toUpperCase(c));
            }else if (Character.isDigit(c)) {
                pinyinCode.append(c);
            }
        }

        return pinyinCode.toString();
    }

    public static void main(String[] args) {
        String input = "重庆 123Asss";
        String pinyinCode = getPinyinCode(input);
        System.out.println("拼音简码: " + pinyinCode);
    }
}